﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using DingApi.Models;
using System.Data;

using System.Web;
using Dingding.Helper;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;


namespace DingApi.Controllers
{
    [RoutePrefix("api/Paef11")]
    public class Paef11Controller : ApiController
    {

      
        
        [HttpPost]
        [Route("PostPaef11_inq_asmat_no")]
        // 与 PostPaef21_Inq 功能类似，有库区权限限制，去除数量为0的记录
        public System.Data.DataSet PostPaef11_inq_asmat_no([FromBody]  JObject obj)
        {
            EI.EIInfo inBlock = new EI.EIInfo();

            string company_code = obj["COMPANY_CODE"] == null ? " " : obj["COMPANY_CODE"].ToString();
            string asmat_no     = obj["ASMAT_NO"] == null ? " " : obj["ASMAT_NO"].ToString();
            string userid       = obj["USERID"] == null ? " " : obj["USERID"].ToString();
            string stock_no     = obj["STOCK_NO"] == null ? " " : obj["STOCK_NO"].ToString();


            inBlock.Tables[0].Columns.Add("COMPANY_CODE"); 
            inBlock.Tables[0].Columns.Add("ASMAT_NO");
            



            inBlock.Tables[0].Rows.Add();
            inBlock.sys_info.company_code   = "LT";
            inBlock.sys_info.userid         = userid;


            inBlock.Tables[0].Rows[0]["COMPANY_CODE"] = company_code; 
            inBlock.Tables[0].Rows[0]["ASMAT_NO"] = asmat_no;

            inBlock.Tables.Add("PageInfo"); //后台需要
           


            EI.EIInfo outBlock = EI.EITuxedo.CallService("pabm11_inq", inBlock);
            
            outBlock.Tables[0].TableName = "Table0";

            if (!(outBlock.Tables[0].Columns.Contains("STOCK_NO")))
            {
                outBlock.Tables[0].Columns.Add("STOCK_NO");
            }

            if (!(outBlock.Tables[0].Columns.Contains("PA_LOCATION_NO")))
            {
                outBlock.Tables[0].Columns.Add("PA_LOCATION_NO");
            }

            //类别
            if (!(outBlock.Tables[0].Columns.Contains("ASMAT_BIG_TYPE")))
            {
                outBlock.Tables[0].Columns.Add("ASMAT_BIG_TYPE");
            }
            //ASMAT_BIG_NAME
            if (!(outBlock.Tables[0].Columns.Contains("ASMAT_BIG_NAME")))
            {
                outBlock.Tables[0].Columns.Add("ASMAT_BIG_NAME");
            }

            if (!(outBlock.Tables[0].Columns.Contains("ASMAT_SMALL_TYPE")))
            {
                outBlock.Tables[0].Columns.Add("ASMAT_SMALL_TYPE");
            }
            if (!(outBlock.Tables[0].Columns.Contains("ASMAT_SMALL_NAME")))
            {
                outBlock.Tables[0].Columns.Add("ASMAT_SMALL_NAME");
            }

            	 



            //QUANTITY
            if (!(outBlock.Tables[0].Columns.Contains("QUANTITY")))
            {
                outBlock.Tables[0].Columns.Add("QUANTITY");
            }
            //ASSIST_NUM
            if (!(outBlock.Tables[0].Columns.Contains("ASSIST_NUM")))
            {
                outBlock.Tables[0].Columns.Add("ASSIST_NUM");
            }

            if (!(outBlock.Tables[0].Columns.Contains("ARCHIVE_FLAG")))
            {
                outBlock.Tables[0].Columns.Add("ARCHIVE_FLAG");
            }

            if (!(outBlock.Tables[0].Columns.Contains("REMARK")))
            {
                outBlock.Tables[0].Columns.Add("REMARK");
            }


            if (outBlock.Tables[0].Rows.Count>0)
            {   
                outBlock.Tables[0].Rows[0]["ASMAT_BIG_TYPE"] = "";
                outBlock.Tables[0].Rows[0]["ASMAT_BIG_NAME"] = "";
                outBlock.Tables[0].Rows[0]["ASMAT_SMALL_TYPE"] = "";
                outBlock.Tables[0].Rows[0]["ASMAT_SMALL_NAME"] = "";
                outBlock.Tables[0].Rows[0]["PA_LOCATION_NO"] = "";
                outBlock.Tables[0].Rows[0]["ARCHIVE_FLAG"] = "W";//生产后直接入库；

                outBlock.Tables[0].Rows[0]["REMARK"] = "";


            }
            
           


            //“资质+仓库”对应的库位

            if (stock_no!=" ")
            {
                string sql_str1 = " select PA_LOCATION_NO from  tpabmb1 where   ";
                sql_str1 += " stock_no ='" + stock_no + "'";
                sql_str1 += " and asmat_no ='" + asmat_no + "'";
                EI.EIInfo outBlock2 = EF.Utility.ExecQuery(sql_str1);

                if (outBlock2.Tables[0].Rows.Count > 0)
                {
                    outBlock.Tables[0].Rows[0]["PA_LOCATION_NO"] = outBlock2.Tables[0].Rows[0][0].ToString();
                }
            }
          
            






            
            
           
             



            //系统信息；
            outBlock.Tables.Add("SYS");
            outBlock.Tables["SYS"].Columns.Add("FLAG");
            outBlock.Tables["SYS"].Columns.Add("MSG");
            outBlock.Tables["SYS"].Rows.Add(outBlock.sys_info.flag, outBlock.sys_info.msg);            
            return outBlock;


        }


        [HttpPost]
        [Route("PostPaef11_inq_pa_location_no")]
        // 查询入库“资质+仓库”对应的库位
        public System.Data.DataSet PostPaef11_inq_pa_location_no([FromBody]  JObject obj)
        {
            EI.EIInfo inBlock = new EI.EIInfo();

            string stock_no = obj["STOCK_NO"] == null ? " " : obj["STOCK_NO"].ToString();
            string asmat_no = obj["ASMAT_NO"] == null ? " " : obj["ASMAT_NO"].ToString();

            //“资质+仓库”对应的库位
            string sql_str1  =  " select PA_LOCATION_NO from  tpabmb1 where   ";
            sql_str1        +=  " stock_no ='" + stock_no +  "'";
            sql_str1        +=  " and asmat_no ='" + asmat_no +  "'";
                         
            EI.EIInfo outBlock = EF.Utility.ExecQuery(sql_str1);
            
            //系统信息；
            outBlock.Tables.Add("SYS");
            outBlock.Tables["SYS"].Columns.Add("FLAG");
            outBlock.Tables["SYS"].Columns.Add("MSG");
            outBlock.Tables["SYS"].Rows.Add(outBlock.sys_info.flag, outBlock.sys_info.msg);
            return outBlock;


        }


        [HttpPost]
        [Route("postpaef11_inq_apply_bill_no")]
        // 与 PostPaef21_Inq 功能类似，有库区权限限制，去除数量为0的记录
        public System.Data.DataSet postpaef11_inq_apply_bill_no([FromBody]  JObject obj)
        {
            EI.EIInfo inBlock = new EI.EIInfo();

            string company_code = obj["COMPANY_CODE"] == null ? " " : obj["COMPANY_CODE"].ToString();
            string asmat_no = obj["APPLY_BILL_NO"] == null ? " " : obj["APPLY_BILL_NO"].ToString();
            string userid = obj["USERID"] == null ? " " : obj["USERID"].ToString();


            inBlock.Tables[0].Columns.Add("COMPANY_CODE");
            inBlock.Tables[0].Columns.Add("APPLY_BILL_NO");




            inBlock.Tables[0].Rows.Add();
            inBlock.sys_info.company_code = "LT";
            inBlock.sys_info.userid = userid;


            inBlock.Tables[0].Rows[0]["COMPANY_CODE"] = company_code;
            inBlock.Tables[0].Rows[0]["APPLY_BILL_NO"] = asmat_no;
             

            EI.EIInfo outBlock = EI.EITuxedo.CallService("paef11_pop_inq", inBlock);

            //IBN 入库实绩表用此字段记录上游单据号
            if (!(outBlock.Tables[0].Columns.Contains("IBN")))
            {
                outBlock.Tables[0].Columns.Add("IBN");
            }
            if (!(outBlock.Tables[0].Columns.Contains("ASMAT_BIG_NAME")))
            {
                outBlock.Tables[0].Columns.Add("ASMAT_BIG_NAME");
            }
            if (!(outBlock.Tables[0].Columns.Contains("ASMAT_BIG_TYPE")))
            {
                outBlock.Tables[0].Columns.Add("ASMAT_BIG_TYPE");
            }

            //多项记录的库区库位保留在多记录中，不再从单记录中获取全部信息；
            if (!(outBlock.Tables[0].Columns.Contains("STOCK_NO")))
            {
                outBlock.Tables[0].Columns.Add("STOCK_NO");
            }
            if (!(outBlock.Tables[0].Columns.Contains("PA_LOCATION_NO")))
            {
                outBlock.Tables[0].Columns.Add("PA_LOCATION_NO");
            }
            if (!(outBlock.Tables[0].Columns.Contains("REMARK")))
            {
                outBlock.Tables[0].Columns.Add("REMARK");
            }


          

            //
            for (int i = outBlock.Tables[0].Rows.Count - 1; i >= 0; i--)
            {
                outBlock.Tables[0].Rows[i]["IBN"] = outBlock.Tables[0].Rows[i]["APPLY_BILL_NO"];
                outBlock.Tables[0].Rows[i]["QUANTITY"]      = 0;
                outBlock.Tables[0].Rows[i]["ASSIST_NUM"]    = 0;
                outBlock.Tables[0].Rows[i]["STOCK_NO"]      = "";//一级库中的仓库；
                outBlock.Tables[0].Rows[i]["PA_LOCATION_NO"] = "";
                outBlock.Tables[0].Rows[i]["REMARK"] = "";

                outBlock.Tables[0].Rows[i]["ASMAT_BIG_NAME"] = "";
                outBlock.Tables[0].Rows[i]["ASMAT_BIG_TYPE"] = "";

            }
            
            outBlock.Tables[0].TableName = "Table0";

            outBlock.Tables.Add("MAIN");

            outBlock.Tables["MAIN"].Columns.Add("ASMAT_NO");
            outBlock.Tables["MAIN"].Columns.Add("ASMAT_NAME");
            outBlock.Tables["MAIN"].Columns.Add("SPEC");
            outBlock.Tables["MAIN"].Columns.Add("UNIT");
            outBlock.Tables["MAIN"].Columns.Add("ASSIST_UNIT");
            outBlock.Tables["MAIN"].Columns.Add("STOCK_NO");
            outBlock.Tables["MAIN"].Columns.Add("PA_LOCATION_NO");
            outBlock.Tables["MAIN"].Columns.Add("REMARK");

            
            outBlock.Tables["MAIN"].Columns.Add("ASMAT_BIG_NAME");
            outBlock.Tables["MAIN"].Columns.Add("ASMAT_BIG_TYPE");


            outBlock.Tables["MAIN"].Columns.Add("QUANTITY");
            outBlock.Tables["MAIN"].Columns.Add("ASSIST_NUM");
            outBlock.Tables["MAIN"].Rows.Add("", "", "", "", "", "", "", "", "", "", 0, 0);
            
            

            //系统信息；
            outBlock.Tables.Add("SYS");
            outBlock.Tables["SYS"].Columns.Add("FLAG");
            outBlock.Tables["SYS"].Columns.Add("MSG");
            outBlock.Tables["SYS"].Rows.Add(outBlock.sys_info.flag, outBlock.sys_info.msg);
            return outBlock;


        }


        

        //入库时，显示该授权下的仓库
        [HttpPost]
        [Route("PostPaef11_Load")]
        public System.Data.DataSet PostPaef11_Load([FromBody]  JObject obj)
        { 
            string userid = obj["USERID"] == null ? " " : obj["USERID"].ToString(); 
            string sql_str1 =  " select  t.STOCK_NO CODE ";
            sql_str1 += " ,t.stock_name   CODE_DESC_1_CONTENT ,t.BRANCH_CODE ";
            sql_str1 += "   from tsimm01 t,tsimm04 tt  ";
            sql_str1 += "    WHERE t.stock_no = tt.stock_no ";
            sql_str1 += "   and tt.staff_id = '" + userid + "' ";
            sql_str1 += "   and  t.STOCK_TYPE='A'";
            sql_str1 += "   order by   t.stock_name "; 

            EI.EIInfo outBlock = EF.Utility.ExecQuery(sql_str1); 

            outBlock.Tables[0].TableName = "STOCK_NO";


            //入库类别
            EI.EIInfo outBlock2 = EF.Utility.GetCodeClassValue("DM41");

            DataRow dr4 = outBlock2.Tables["DM41"].NewRow();
            dr4["CODE"] = " ";
            dr4["CODE_DESC_1_CONTENT"] = " ";
            outBlock2.Tables["DM41"].Rows.InsertAt(dr4, 0);
           


            outBlock.Tables.Add(outBlock2.Tables[0].Copy());


            //系统信息；
            outBlock.Tables.Add("SYS");
            outBlock.Tables["SYS"].Columns.Add("FLAG");
            outBlock.Tables["SYS"].Columns.Add("MSG");
            outBlock.Tables["SYS"].Rows.Add(outBlock.sys_info.flag, outBlock.sys_info.msg);
            return outBlock;


        }


        //入库，入库实绩新增 + 入库确认。[json表结构体参数相互传送]
        [HttpPost]
        [Route("PostPaef11_save")] 
        
        public System.Data.DataSet PostPaef11_save([FromBody]  JObject obj)
        {
            //api 只做数据的处理，数据效验应放在后台C++ 或钉钉前端；

            //obj对象区分大小写的；报错。
             
            string USERID   = obj["USERID"]     == null ? " " : obj["USERID"].ToString();
            string USERNAME = obj["USERNAME"]   == null ? " " : obj["USERNAME"].ToString();
            string FORMNAME = obj["FORMNAME"]   == null ? " " : obj["FORMNAME"].ToString();
            

            DataTable table_rec = JsonConvert.DeserializeObject<DataTable>(obj["table_rec"].ToString(), new DingApi.ReadAheadDataTableConverter());;
            DataTable table_rec_main = JsonConvert.DeserializeObject<DataTable>(obj["table_rec_main"].ToString(), new DingApi.ReadAheadDataTableConverter());


            DataTable  dtTemp = null;

            //多记录
            if (table_rec.Rows.Count > 1)
            {
                dtTemp = table_rec.Select("ARCHIVE_FLAG  = 'W'").CopyToDataTable<DataRow>();

                if (dtTemp != null && !(dtTemp.Columns.Contains("LOCATION_NAME")))
                {
                    dtTemp.Columns.Add("LOCATION_NAME");
                }

                for (int i = dtTemp.Rows.Count - 1; i >= 0; i--)
                {
                    //仓库
                    //dtTemp.Rows[i]["STOCK_NO"] = table_rec_main.Rows[0]["STOCK_NO"];
                    ////库位号
                    //dtTemp.Rows[i]["LOCATION_NAME"] = table_rec_main.Rows[0]["PA_LOCATION_NO"];
                    
                    ////类别ASMAT_BIG_TYPE
                    //dtTemp.Rows[i]["ASMAT_BIG_TYPE"] = table_rec_main.Rows[0]["ASMAT_BIG_TYPE"];

                    ////条线ASMAT_BIG_NAME(暂时未用）、
                    //dtTemp.Rows[i]["ASMAT_BIG_NAME"] = table_rec_main.Rows[0]["ASMAT_BIG_NAME"];
                    dtTemp.Rows[i]["LOCATION_NAME"] = dtTemp.Rows[i]["PA_LOCATION_NO"];

                }

            }
            //单记录
            else
            {
                dtTemp = JsonConvert.DeserializeObject<DataTable>(obj["table_rec_main"].ToString(), new DingApi.ReadAheadDataTableConverter());

                if (dtTemp != null && dtTemp.Columns.Contains("PA_LOCATION_NO") )
                {
                    if (!(dtTemp.Columns.Contains("LOCATION_NAME")))
                    {
                        dtTemp.Columns.Add("LOCATION_NAME");
                    }
                    if (!(dtTemp.Columns.Contains("ARCHIVE_FLAG")))
                    {
                        dtTemp.Columns.Add("ARCHIVE_FLAG");
                    }

                    dtTemp.Rows[0]["LOCATION_NAME"] = dtTemp.Rows[0]["PA_LOCATION_NO"];
                    dtTemp.Rows[0]["ARCHIVE_FLAG"] = "W";

                }

            }


        
           
            EI.EIInfo inBlock2 = new EI.EIInfo();
            inBlock2.sys_info.company_code = "LT";
            inBlock2.sys_info.company_name = "龙腾特钢";

            inBlock2.sys_info.userid    = USERID;
            inBlock2.sys_info.username  = USERNAME;
            inBlock2.sys_info.formname  = FORMNAME;


            inBlock2.Tables[0].Merge(dtTemp);

            

            inBlock2.Tables[0].TableName = "INS";

            EI.EIInfo outBlock = EI.EITuxedo.CallService("paef11_save", inBlock2);
                     
            //系统信息；
            outBlock.Tables.Add("SYS");
            outBlock.Tables["SYS"].Columns.Add("FLAG");
            outBlock.Tables["SYS"].Columns.Add("MSG");
            outBlock.Tables["SYS"].Rows.Add(outBlock.sys_info.flag, outBlock.sys_info.msg);
            return outBlock;

        }

    }
}